class LiczbaException extends Exception {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public LiczbaException(String g){
		super(g);
	}
	};

public class Liczba {
	private int n;
	private String toHex(int n) {
		if (n < 10) { return Integer.toString(n); }
		String str = "ABCDEFG";
		return str.substring(n - 10, n - 10 + 1);
	}
	private int todec(String n, int podstawa) throws LiczbaException {
		int i = 0;
		try {
			i = Integer.parseInt(n);
			return i;
		} catch (NumberFormatException ex) { //nie udalo zamienic na int:
			String str = "ABCDEF";
			i = 10 + str.indexOf(n);
			if (i==9) throw new LiczbaException("Bledny znak ("+n+")");
			if (i>=podstawa) throw new LiczbaException("Znak z poza zakresu danej podstawy");
			return i;
		}
	}
	Liczba() {
		n = 0;
	}
	Liczba(int n) {
		this.n = n;
	}
	Liczba(String n, int podstawa) throws LiczbaException {
		if(podstawa>16 || podstawa <2) throw new LiczbaException("Bledna podstawa");
		int len = n.length(), i, j=0, subint;
		for (i=0;i<len;i++){
			try{
				subint = todec(n.substring(i,i+1), podstawa);
			}catch(LiczbaException ex){
				throw new LiczbaException(ex.getMessage());
			}
			j+= Math.pow(podstawa,len-i-1)*subint;
		}
		this.n=j;
	}
	public String zapis(int podstawa) throws LiczbaException {
		if(podstawa>16 || podstawa <2) throw new LiczbaException("Bledna podstawa");
		String wynik="";

		int tmp = n;
		while (tmp!=0) {
			wynik = toHex(tmp%podstawa) + wynik;
			tmp = tmp / podstawa;
		}
		return wynik;
	}
}